Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/ui/guide.py 2.0.1 (486a97e4) Text, 17.19 KB

T8b949e# Copyright (c) 2026 Mark Qvist - See LICENSE.md and README.md

Tff7b72import T7ee787time
Tff7b72import T7ee787RNS

Tff7b72from T7ee787typing Tff7b72import Te6edf3Union
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dpTb4b4b4,Te6edf3sp
Tff7b72from T7ee787kivyT7ee787.T7ee787langT7ee787.T7ee787builder Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787clipboard Tff7b72import Te6edf3Clipboard
Tff7b72from T7ee787kivyT7ee787.T7ee787utils Tff7b72import Te6edf3escape_markup
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787recycleview Tff7b72import Te6edf3MDRecycleView
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787list Tff7b72import Te6edf3OneLineIconListItem
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787pickers Tff7b72import Te6edf3MDColorPicker
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatIconButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787dialog Tff7b72import Te6edf3MDDialog
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3StringPropertyTb4b4b4, Te6edf3BooleanPropertyTb4b4b4, Te6edf3OptionPropertyTb4b4b4, Te6edf3ColorPropertyTb4b4b4, Te6edf3Property
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787list Tff7b72import Te6edf3MDListTb4b4b4, Te6edf3IconLeftWidgetTb4b4b4, Te6edf3IconRightWidgetTb4b4b4, Te6edf3OneLineAvatarIconListItem
Tff7b72from T7ee787kivymdT7ee787.T7ee787icon_definitions Tff7b72import Te6edf3md_icons
Tff7b72from T7ee787kivymdT7ee787.T7ee787toast Tff7b72import Te6edf3toast
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3StringPropertyTb4b4b4, Te6edf3BooleanProperty
Tff7b72from T7ee787kivyT7ee787.T7ee787effectsT7ee787.T7ee787scroll Tff7b72import Te6edf3ScrollEffect

Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3dark_theme_text_color
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787.T7ee787helpers Tff7b72import Te6edf3dark_theme_text_color

Tff7b72class T56d364GuideTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Tff7b72None

Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffguide_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_guide_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffapp Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffscreenTb4b4b4)

Tff7b72def Td2a8fflink_execTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffljTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3webbrowserTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffhttps://unsigned.io/donateTa5d6ff"Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3ljTb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)

Te6edf3guide_text1 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Introduction[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Welcome to [i]Sideband[/i], an LXMF client for Android, Linux, macOS and Windows. With Sideband, you can communicate with other people or LXMF-compatible systems over Reticulum networks using LoRa, Packet Radio, WiFi, I2P, or anything else Reticulum supports.

Ta5d6ffThis short guide will give you a basic introduction to the concepts that underpin Sideband and LXMF (which is the protocol that Sideband uses to communicate). If you are not already familiar with LXMF and Reticulum, it is probably a good idea to read this guide, since Sideband is very different from other messaging apps.Ta5d6ff"""
Te6edf3guide_text2 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Communication Without Subjection[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Sideband is completely free, permission-less, anonymous and infrastructure-less. Sideband uses the peer-to-peer and distributed messaging system LXMF. There is no sign-up, no service providers, no Ta5d6ff"Ta5d6ffend-user license agreementsTa5d6ff"Ta5d6ff, no data theft and no surveillance. You own the system.

Ta5d6ffThis also means that Sideband operates differently than what you might be used to. It does not need a connection to a server on the Internet to function, and you do not have an account anywhere.Ta5d6ff"""
Te6edf3guide_text3 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Operating Principles[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]When Sideband is started on your device for the first time, it randomly generates a 512-bit Reticulum Identity Key. This cryptographic key is then used to create an LXMF address for your use, and in turn to secure any communication to your address. Any other endpoint in [i]any[/i] Reticulum network will be able to send data to your address, as long as there is [i]some sort of physical connection[/i] between your device and the remote endpoint. You can also move around to other Reticulum networks with this address, even ones that were never connected to the network the address was created on, or that didnTa5d6ff'Ta5d6fft exist when the address was created.Tffea00\nTffea00\nTa5d6ffYour LXMF address is yours to keep and control for as long (or short) a time you need it, and you can always delete it and create a new one. You identity keys and corresponding addresses are never registered on or controlled by any external servers or services, and will never leave your device, unless you manually export them for backup.Ta5d6ff"""
Te6edf3guide_text10 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Getting Connected[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]If you already have Reticulum connectivity set up on the device you are running Sideband on, no further configuration should be necessary, and Sideband will simply use the available Reticulum connectivity.Tffea00\nTffea00\nTa5d6ffIf you are running Sideband on a computer, you can configure interfaces in the Reticulum configuration file ([b]~/.reticulum/config[/b] by default). If you are running Sideband on an Android device, you can configure various interface types in the [b]Connectivity[/b] section. By default, only an [i]AutoInterface[/i] is enabled, which will connect you automatically with any other local devices on the same WiFi and/or Ethernet networks. This may or may not include Reticulum Transport Nodes, which can route your traffic to wider networks.Tffea00\nTffea00\nTa5d6ffYou can enable any or all of the other available interface types to gain wider connectivity. For more specific information on interface types, configuration options, and how to effectively build your own Reticulum networks, see the [b]Reticulum Manual[b].Ta5d6ff"""
Te6edf3guide_text4 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Becoming Reachable[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]To establish reachability for any Reticulum destination on a network, an [i]announce[/i] must be sent. By default, Sideband will announce automatically when necessary, but if you want to stay silent, automatic announces can be disabled in [b]Preferences[/b].Tffea00\nTffea00\nTa5d6ffTo send an announce manually, press the [i]Announce[/i] button in the [i]Conversations[/i] section of the program. When you send an announce, you make your LXMF address reachable for real-time messaging to the entire network you are connected to. Even in very large networks, you can expect global reachability for your address to be established in under a minute.

Ta5d6ffIf you donTa5d6ff'Ta5d6fft move to other places in the network, and keep connected through the same hubs or gateways, it is generally not necessary to send an announce more often than once every week. If you change your entry point to the network, you may want to send an announce, or you may just want to stay quiet.Ta5d6ff"""

Te6edf3guide_text5 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Relax & Disconnect[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]If you are not connected to the network, it is still possible for other people to message you, as long as one or more [i]Propagation Nodes[/i] exist on the network. These nodes pick up and hold encrypted in-transit messages for offline users. Messages are always encrypted before leaving the originators device, and nobody else than the intended recipient can decrypt messages in transit.

Ta5d6ffThe Propagation Nodes also distribute copies of messages between each other, such that even the failure of almost every node in the network will still allow users to sync their waiting messages. If all Propagation Nodes disappear or are destroyed, users can still communicate directly.Tffea00\nTffea00\nTa5d6ffReticulum and LXMF will degrade gracefully all the way down to single users communicating directly via long-range data radios. Anyone can start up new propagation nodes and integrate them into existing networks without permission or coordination. Even a small and cheap device like a Rasperry Pi can handle messages for millions of users. LXMF networks are designed to be quite resilient, as long as there are people using them.Ta5d6ff"""

Te6edf3guide_text6 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Packets Find A Way[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Connections in Reticulum networks can be wired or wireless, span many intermediary hops, run over fast links or ultra-low bandwidth radio, tunnel over the Invisible Internet (I2P), private networks, satellite connections, serial lines or anything else that Reticulum can carry data over.Tffea00\nTffea00\nTa5d6ffIn most cases it will not be possible to know what path packets takes in a Reticulum network, and apart from a destination hash, no transmitted packets carries any identifying characteristics. In Reticulum, [i]there is no source addresses[/i].Tffea00\nTffea00\nTa5d6ffAs long as you do not reveal any connecting details between your person and your LXMF address, you can remain anonymous. Sending messages to others does not reveal [i]your[/i] address to anyone else than the intended recipient.Ta5d6ff"""

Te6edf3guide_text7 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Be Yourself, Be Unknown, Stay Free[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Even with the above characteristics in mind, you [b]must remember[/b] that LXMF and Reticulum is not a technology that can guarantee anonymising connections that are already de-anonymised! If you use Sideband to connect to TCP Reticulum hubs over the clear Internet, from a network that can be tied to your personal identity, an adversary may learn that you are generating LXMF traffic.Tffea00\nTffea00\nTa5d6ffIf you want to avoid this, it is recommended to use I2P to connect to Reticulum hubs on the Internet. Or only connecting from within pure Reticulum networks, that take one or more hops to reach connections that span the Internet. This is a complex topic, with many more nuances than can be covered here. You are encouraged to ask on the various Reticulum discussion forums if you are in doubt.

Ta5d6ffIf you use Reticulum and LXMF on hardware that does not carry any identifiers tied to you, it is possible to establish a completely free and identification-less communication system with Reticulum and LXMF clients.Ta5d6ff"""
Te6edf3guide_text8 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Keyboard Shortcuts[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]To ease navigation and operation of the program, Sideband has keyboard shortcuts mapped to the most common actions. A reference is included below.

Ta5d6ff[b]Quick Actions[/b]
Ta5d6ff - [b]Ctrl-W[/b] Go back
Ta5d6ff - [b]Ctrl-Q[/b] Shut down Sideband
Ta5d6ff - [b]Ctrl-N[/b] Create new conversation
Ta5d6ff - [b]Ctrl-R[/b] Start LXMF sync (from Conversations screen)
Ta5d6ff - [b]Ctrl-I[/b] Incoming messages (from Conversations screen)
Ta5d6ff - [b]Ctrl-S[/b] Interface status (from Conversations screen)
Ta5d6ff
Ta5d6ff [b]Message Actions[/b]
Ta5d6ff - [b]Ctrl-Shift-A[/b] add message attachment
Ta5d6ff - [b]Ctrl-Shift-V[/b] add high-quality voice
Ta5d6ff - [b]Ctrl-Shift-C[/b] add low-bandwidth voice
Ta5d6ff - [b]Ctrl-Shift-I[/b] add medium-quality image
Ta5d6ff - [b]Ctrl-Shift-F[/b] add file
Ta5d6ff - [b]Ctrl-D[/b] or [b]Ctrl-S[/b] Send message

Ta5d6ff [b]Voice & PTT Messages[/b]
Ta5d6ff - [b]Space[/b] Start/stop recording
Ta5d6ff - [b]Enter[/b] Save recording to message
Ta5d6ff - With PTT enabled, hold [b]Space[/b] to talk

Ta5d6ff [b]Voice Calls[/b]
Ta5d6ff - [b]Space[/b] PTT in half-duplex call
Ta5d6ff - [b]Ctrl-Space[/b] Answer incoming call
Ta5d6ff - [b]Ctrl-.[/b] Reject incoming call
Ta5d6ff - [b]Ctrl-.[/b] Hang up active call
Ta5d6ff - [b]Ctrl-N[/b] Switch codec
Ta5d6ff - [b]Ctrl-B[/b] Switch call mode

Ta5d6ff [b]Navigation[/b]
Ta5d6ff - [b]Ctrl-[i]n[/i][/b] Go to conversation number [i]n[/i]
Ta5d6ff - [b]Ctrl-Shift-[i]n[/i][/b] Go to object details number [i]n[/i]
Ta5d6ff - [b]Ctrl-R[/b] Go to Conversations
Ta5d6ff - [b]Ctrl-O[/b] Go to Objects & Devices
Ta5d6ff - [b]Ctrl-E[/b] Go to Voice
Ta5d6ff - [b]Ctrl-L[/b] Go to Announce Stream
Ta5d6ff - [b]Ctrl-M[/b] Go to Situation Map
Ta5d6ff - [b]Ctrl-U[/b] Go to Utilities
Ta5d6ff - [b]Ctrl-T[/b] Go to Telemetry configuration
Ta5d6ff - [b]Ctrl-G[/b] Go to Guide
Ta5d6ff - [b]Ctrl-Y[/b] Display own telemetry

Ta5d6ff[b]Map Controls[/b]
Ta5d6ff - [b]Up[/b], [b]down[/b], [b]left[/b], [b]right[/b] Navigate
Ta5d6ff - [b]W[/b], [b]A[/b], [b]S[/b], [b]D[/b] Navigate
Ta5d6ff - [b]H[/b], [b]J[/b], [b]L[/b], [b]K[/b] Navigate
Ta5d6ff - [b]E[/b] or [b]+[/b] Zoom in
Ta5d6ff - [b]Q[/b] or [b]-[/b] Zoom out
Ta5d6ff - Hold [b]Shift[/b] to navigate more coarsely
Ta5d6ff - Hold [b]Alt[/b] to navigate more finely
Ta5d6ff - [b]Ctrl-P[/b] Map Preferences
Ta5d6ff - [b]Ctrl-L[/b] Toggle Layers
Ta5d6ff - [b]Ctrl-X[/b] Toggle Discovered Interfaces
Ta5d6ff - [b]Ctrl-C[/b] Toggle Connectivity MapsTa5d6ff"""

Te6edf3guide_text9 Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Please Support This Project[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]It took me more than eight years to design and build the entire ecosystem of software and hardware that makes this possible. If this project is valuable to you, please go to [u][ref=link]https://unsigned.io/donate[/ref][/u] to support the project with a donation. Every donation directly makes the entire Reticulum project possible.

Ta5d6ffThank you very much for using Free Communications Systems.
Ta5d6ff"""
Te6edf3info1 Tff7b72= Te6edf3guide_text1
Te6edf3info2 Tff7b72= Te6edf3guide_text8
Te6edf3info3 Tff7b72= Te6edf3guide_text2
Te6edf3info4 Tff7b72= Te6edf3guide_text3
Te6edf3info10 Tff7b72= Te6edf3guide_text10
Te6edf3info5 Tff7b72= Te6edf3guide_text4
Te6edf3info6 Tff7b72= Te6edf3guide_text5
Te6edf3info7 Tff7b72= Te6edf3guide_text6
Te6edf3info8 Tff7b72= Te6edf3guide_text7
Te6edf3info9 Tff7b72= Te6edf3guide_text9

Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72== Ta5d6ff"Ta5d6ffDarkTa5d6ff"Tb4b4b4:
Te6edf3info1 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info1Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info2 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info2Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info3 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info3Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info4 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info4Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info5 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info5Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info6 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info6Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info7 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info7Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info8 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info8Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info9 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info9Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Te6edf3info10 Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3info10Tff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info1Tff7b72.Td2a8fftext Tff7b72= Te6edf3info1
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info2Tff7b72.Td2a8fftext Tff7b72= Te6edf3info2
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info3Tff7b72.Td2a8fftext Tff7b72= Te6edf3info3
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info4Tff7b72.Td2a8fftext Tff7b72= Te6edf3info4
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info5Tff7b72.Td2a8fftext Tff7b72= Te6edf3info5
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info6Tff7b72.Td2a8fftext Tff7b72= Te6edf3info6
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info7Tff7b72.Td2a8fftext Tff7b72= Te6edf3info7
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info8Tff7b72.Td2a8fftext Tff7b72= Te6edf3info8
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info9Tff7b72.Td2a8fftext Tff7b72= Te6edf3info9
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info10Tff7b72.Td2a8fftext Tff7b72= Te6edf3info10
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_info9Tff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_ref_pressTff7b72=Te6edf3link_execTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect

Te6edf3layout_guide_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffguide_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"

Ta5d6ff MDTopAppBar:
Ta5d6ff title: Ta5d6ff"Ta5d6ffGuideTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [ [Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)] ]
Ta5d6ff right_action_items:
Ta5d6ff [ [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.app.close_guide_action(self)] ]

Ta5d6ff ScrollView:
Ta5d6ff id:guide_scrollview

Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(35), dp(16), dp(35), dp(16)]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info1
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info2
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info3
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info4
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info10
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info5
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info6
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info7
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info8
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]

Ta5d6ff MDLabel:
Ta5d6ff id: guide_info9
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff"""


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────